package View;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import Comparators.OrderComparator;
import Model.OPD;
import Model.Order;
import Model.Product;
import Model.Warehouse;
import Serializing.ReadFileS;
import Serializing.WriteFileS;
/**
*
* @author Dariana Lupea
* This class represents the GUI for the "shop".
*
*/
public class ShopWindow extends JFrame implements ActionListener {
private JLabel label1, label2, label3, label4, label5, label6, label7, label8;
private JButton but1, but2, but3, but4, but5, but6, but7, but8;
private JTextField field1, field2, field3, field4, field5, field6, field7, field8;
private JButton shoppingBag, placeOrder, newOrder, seeOrderHistory;
private int rasp, banana, orange, apple, kiwi, strawberry, peach, pome;
Warehouse wh;
OPD opd;
ReadFileS readWarehouse;
Warehouse warehouse;
TreeSet<Order> orders;
private static final long serialVersionUID = 1L;
int orderId = 0;
public ShopWindow() {
super("*******Dari's SHOP*******");
getContentPane().setLayout(null);
///// Initialize and set labels////
label1 = new JLabel();
label1.setText("Raspberry");
label1.setBounds(30, 20, 60, 20);
label2 = new JLabel();
label2.setText("Apple");
label2.setBounds(180, 20, 60, 20);
label3 = new JLabel();
label3.setText("Orange");
label3.setBounds(330, 20, 60, 20);
label4 = new JLabel();
label4.setText("Banana");
label4.setBounds(480, 20, 60, 20);
label5 = new JLabel();
label5.setText("Kiwi");
label5.setBounds(40, 200, 60, 20);
label6 = new JLabel();
label6.setText("Strawberry");
label6.setBounds(175, 200, 70, 20);
label7 = new JLabel();
label7.setText("Peach");
label7.setBounds(325, 200, 70, 20);
label8 = new JLabel();
label8.setText("Pomegranate");
label8.setBounds(460, 200, 80, 20);
add(label1);
add(label2);
add(label3);
add(label4);
add(label5);
add(label6);
add(label7);
add(label8);
///// Put images on buttons and set them/////
ImageIcon img1 = new ImageIcon("Images/berry.jpg");
ImageIcon newImg1 = resizeImageForButton(img1);
but1 = new JButton(newImg1);
ImageIcon img2 = new ImageIcon("Images/apple.jpg");
ImageIcon newImg2 = resizeImageForButton(img2);
but2 = new JButton(newImg2);
ImageIcon img3 = new ImageIcon("Images/orange.jpg");
ImageIcon newImg3 = resizeImageForButton(img3);
but3 = new JButton(newImg3);
ImageIcon img4 = new ImageIcon("Images/banana.jpg");
ImageIcon newImg4 = resizeImageForButton(img4);
but4 = new JButton(newImg4);
ImageIcon img5 = new ImageIcon("Images/kiwi.jpg");
ImageIcon newImg5 = resizeImageForButton(img5);
but5 = new JButton(newImg5);
ImageIcon img6 = new ImageIcon("Images/strawberry.jpg");
ImageIcon newImg6 = resizeImageForButton(img6);
but6 = new JButton(newImg6);
ImageIcon img7 = new ImageIcon("Images/peach.jpg");
ImageIcon newImg7 = resizeImageForButton(img7);
but7 = new JButton(newImg7);
ImageIcon img8 = new ImageIcon("Images/pome.jpg");
ImageIcon newImg8 = resizeImageForButton(img8);
but8 = new JButton(newImg8);
but1.setBounds(15, 50, 100, 100);
but2.setBounds(160, 50, 100, 100);
but3.setBounds(305, 50, 100, 100);
but4.setBounds(450, 50, 100, 100);
but5.setBounds(15, 230, 100, 100);
but6.setBounds(160, 230, 100, 100);
but7.setBounds(305, 230, 100, 100);
but8.setBounds(450, 230, 100, 100);
add(but1);
add(but2);
add(but3);
add(but4);
add(but5);
add(but6);
add(but7);
add(but8);
//// Create JTextFields and set them////
field1 = new JTextField("0");
field1.setBounds(55, 150, 20, 20);
field2 = new JTextField("0");
field2.setBounds(200, 150, 20, 20);
field3 = new JTextField("0");
field3.setBounds(345, 150, 20, 20);
field4 = new JTextField("0");
field4.setBounds(495, 150, 20, 20);
field5 = new JTextField("0");
field5.setBounds(55, 330, 20, 20);
field6 = new JTextField("0");
field6.setBounds(200, 330, 20, 20);
field7 = new JTextField("0");
field7.setBounds(345, 330, 20, 20);
field8 = new JTextField("0");
field8.setBounds(495, 330, 20, 20);
add(field1);
add(field2);
add(field3);
add(field4);
add(field5);
add(field6);
add(field7);
add(field8);
//// Create other useful JButtons and set them////
shoppingBag = new JButton("Shopping bag");
shoppingBag.setBounds(600, 50, 120, 30);
shoppingBag.addActionListener(this);
add(shoppingBag);
placeOrder = new JButton("Place order");
placeOrder.setBounds(600, 100, 120, 30);
placeOrder.addActionListener(this);
add(placeOrder);
seeOrderHistory = new JButton("See order history");
seeOrderHistory.addActionListener(this);
seeOrderHistory.setBounds(600, 150, 135, 30);
add(seeOrderHistory);
newOrder = new JButton("New Order");
newOrder.addActionListener(this);
newOrder.setBounds(600, 200, 135, 30);
add(newOrder);
////////////////////////////////
readWarehouse = new ReadFileS();
warehouse = readWarehouse.ReadFile();// read the products from stock
wh = new Warehouse();// used to change the stock's state
opd = new OPD();// used to save all the orders
orders = new TreeSet<Order>(new OrderComparator());
opd.setOrder(orders);
/////// Frame details///////
setVisible(true);
setSize(900, 430);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
/*
* Method used to resize the image to be put on the button
*/
public ImageIcon resizeImageForButton(ImageIcon image) {
Image takeImage = image.getImage();
Image resizedImg = takeImage.getScaledInstance(100, 100, java.awt.Image.SCALE_SMOOTH);
ImageIcon newImage = new ImageIcon(resizedImg);
return newImage;
}
@Override
public void actionPerformed(ActionEvent event) {
//////// quantities introduced by user for each product///////
rasp = Integer.parseInt(field1.getText().trim());
apple = Integer.parseInt(field2.getText().trim());
orange = Integer.parseInt(field3.getText().trim());
banana = Integer.parseInt(field4.getText().trim());
kiwi = Integer.parseInt(field5.getText().trim());
strawberry = Integer.parseInt(field6.getText().trim());
peach = Integer.parseInt(field7.getText().trim());
pome = Integer.parseInt(field8.getText().trim());
///////// see what is in the order-list///////////
if (event.getSource() == shoppingBag) {
Integer[] quantity = new Integer[8];
quantity[0] = rasp;
quantity[1] = apple;
quantity[2] = orange;
quantity[3] = banana;
quantity[4] = kiwi;
quantity[5] = strawberry;
quantity[6] = peach;
quantity[7] = pome;
ArrayList<String> fruits = new ArrayList<String>();
fruits.add("Raspberry: ");
fruits.add("Apple: ");
fruits.add("Orange: ");
fruits.add("Banana: ");
fruits.add("Kiwi: ");
fruits.add("Strawberry: ");
fruits.add("Peach: ");
fruits.add("Pome: ");
String output = "";
for (int i = 0; i < fruits.size(); i++) {
String everything = fruits.get(i).toString();
String everything1 = quantity[i].toString();
output += everything + " " + everything1 + "\n";
}
JOptionPane.showMessageDialog(this, output, "Your order is", JOptionPane.PLAIN_MESSAGE);
}
//// Place an order
if (event.getSource() == placeOrder) {
orderId++;
Set<Product> orderedProducts = placeAnOrder();
for (Product p : orderedProducts) {
System.out.println("ordered products:");
System.out.println(p.getName());
System.out.println(p.getQuantity());
System.out.println("\n");
/////////////////////////////
Order newOrder = new Order(orderId, orderedProducts.size(), getCurrentTime(), "Pending...", null);
newOrder.setOrderedProducts(orderedProducts);
opd.addOrder(newOrder);
WriteFileS writeOPD = new WriteFileS(opd);
System.out.println(newOrder.getOrderDate());
System.out.println(newOrder.getNoOfProductsContained());
System.out.println(newOrder.getOrderId());
}
}
if (event.getSource() == newOrder) {
field1.setText("0");
field2.setText("0");
field3.setText("0");
field4.setText("0");
field5.setText("0");
field6.setText("0");
field7.setText("0");
field8.setText("0");
}
if (event.getSource() == seeOrderHistory) {
new seeOrderH();
}
}
public Set<Product> placeAnOrder() {
boolean b1 = true;
boolean b2 = true;
boolean b3 = true;
boolean b4 = true;
boolean b5 = true;
boolean b6 = true;
boolean b7 = true;
boolean b8 = true;
ArrayList<String> availableProducts = new ArrayList<String>();
Set<Product> orderedProducts = new HashSet<Product>();
Iterator<Product> iterator = warehouse.checkProducts();
while (iterator.hasNext()) {
Product p = iterator.next();
///////////////////////////
if (p.getName().equals("banana")) {
if (banana != 0) {
if (p.getQuantity() >= banana) {
Product p2 = new Product(p.getName(), p.getId(), banana, p.getPrice());
p.setQuantity(p.getQuantity() - banana);
orderedProducts.add(p2);
System.out.println("Bananas added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " bananas in stock");
b1 = false;
}
} else {
// b1 = false;
// System.out.println("Bananas are not on stock");
}
}
//////////////////////////
else if (p.getName().equals("raspberry")) {
if (rasp != 0) {
if (p.getQuantity() >= rasp) {
Product p2 = new Product(p.getName(), p.getId(), rasp, p.getPrice());
p.setQuantity(p.getQuantity() - rasp);
orderedProducts.add(p2);
System.out.println("Raspberry added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " raspberries in stock");
b2 = false;
}
} else {
// b2 = false;
}
}
///////////////////////////////
else if (p.getName().equals("apple")) {
if (apple != 0) {
if (p.getQuantity() >= apple) {
Product p2 = new Product(p.getName(), p.getId(), apple, p.getPrice());
p.setQuantity(p.getQuantity() - apple);
orderedProducts.add(p2);
System.out.println("Apple added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " apples in stock");
b3 = false;
}
} else {
// b3 = false;
}
}
////////////////////////////////////////////////
else if (p.getName().equals("orange")) {
if (orange != 0) {
if (p.getQuantity() >= orange) {
Product p2 = new Product(p.getName(), p.getId(), orange, p.getPrice());
p.setQuantity(p.getQuantity() - orange);
orderedProducts.add(p2);
System.out.println("Oranges added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " oranges in stock");
b4 = false;
}
} else {
// b4 = false;
}
}
///////////////////////////////////////
else if (p.getName().equals("kiwi")) {
if (kiwi != 0) {
if (p.getQuantity() >= kiwi) {
Product p2 = new Product(p.getName(), p.getId(), kiwi, p.getPrice());
p.setQuantity(p.getQuantity() - kiwi);
orderedProducts.add(p2);
System.out.println("Kiwies added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " kiwis in stock");
b5 = false;
}
} else {
// b5 = false;
}
}
////////////////////////////////////////////////
else if (p.getName().equals("strawberry")) {
if (strawberry != 0) {
if (p.getQuantity() >= strawberry) {
Product p2 = new Product(p.getName(), p.getId(), strawberry, p.getPrice());
p.setQuantity(p.getQuantity() - strawberry);
orderedProducts.add(p2);
System.out.println("Strawberry added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this,
"Sorry! Only " + p.getQuantity() + " strawberries in stock");
b6 = false;
}
} else {
// b6 = false;
}
}
///////////////////////////////////
else if (p.getName().equals("peach")) {
if (peach != 0) {
if (p.getQuantity() >= peach) {
Product p2 = new Product(p.getName(), p.getId(), peach, p.getPrice());
p.setQuantity(p.getQuantity() - peach);
orderedProducts.add(p2);
System.out.println("Peach added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this, "Sorry! Only " + p.getQuantity() + " peaches in stock");
b7 = false;
}
} else {
// b7 = false;
}
}
///////////////////////////////////
else if (p.getName().equals("pome")) {
if (pome != 0) {
if (p.getQuantity() >= pome) {
Product p2 = new Product(p.getName(), p.getId(), pome, p.getPrice());
p.setQuantity(p.getQuantity() - peach);
orderedProducts.add(p2);
System.out.println("Pomegrenate added");
availableProducts.add(p.getName());
System.out.println(p.getQuantity());
} else if (p.getQuantity() >= 1) {
JOptionPane.showMessageDialog(this,
"Sorry! Only " + p.getQuantity() + " pomegrenates in stock");
b8 = false;
}
} else {
// b8 = false;
}
}
}
String out = "";
for (int i = 0; i < availableProducts.size(); i++) {
out += "Available: " + availableProducts.get(i) + "\n";
}
JOptionPane.showMessageDialog(this, out, "Your order:", JOptionPane.PLAIN_MESSAGE);
JOptionPane.showMessageDialog(null, "Your order was placed. Thank you!");
// what remains on the stock
while (iterator.hasNext()) {
Product p = iterator.next();
warehouse.addProduct(p);
}
WriteFileS write = new WriteFileS(warehouse);
System.out.println("changed stock");// change the warehouse state
/////////////////////////////////////
return orderedProducts;
}
public String getCurrentTime() {
Calendar cal = new GregorianCalendar();
int second = cal.get(Calendar.SECOND);
int minute = cal.get(Calendar.MINUTE);
int hour = cal.get(Calendar.HOUR);
String time = hour + ":" + (minute) + ":" + second;
return time;
}
public class seeOrderH extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel topPanel;
private JTable table;
private JScrollPane scrollPane;
private DefaultTableModel model;
public seeOrderH() {
super("Orders");
setTitle("Latest orders");
setSize(300, 200);
setBackground(Color.GRAY);
// Create a panel to hold all other components
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
getContentPane().add(topPanel);
// Create columns names
String columnNames[] = { "Order ID", "Order Date", "Order Status" };
ReadFileS read = new ReadFileS();
OPD newOPD = read.ReadOPD();
table = new JTable();
Object[] columns = { "Order ID", "Order Date", "Order Status" };
model = new DefaultTableModel();
model.setColumnIdentifiers(columns);
table.setModel(model);
Iterator<Order> iterator = newOPD.checkOrders();
while (iterator.hasNext()) {
Order o = iterator.next();
String id = o.getOrderId().toString();
String date = o.getOrderDate();
String status = o.getOrderStatus();
Object[] row = new Object[3];
row[0] = id;
row[1] = date;
row[2] = status;
model.addRow(row);
}
// Add the table to a scrolling pane
scrollPane = new JScrollPane(table);
topPanel.add(scrollPane, BorderLayout.CENTER);
// getContentPane().setLayout(null);
setVisible(true);
setSize(900, 430);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
}
}